// ssl
#include <stdio.h>
// 安全哈希函数 SHA128 SHA256 SHA512
#include <openssl/sha.h>
// MD5 不推荐
#include <openssl/md5.h>
// 加密验证公钥 新版 API
#include <openssl/evp.h>
#include <string.h>

int main(int argc, char* argv[])
{
    //任意长度的输入
    char* txt = "BTS 200900";
    // MD5 摘要长度 16 # define MD5_DIGEST_LENGTH 16
    //生成固定长度的摘要信息 32
    unsigned char info[SHA256_DIGEST_LENGTH];

    // printf("%d\n", sizeof(txt)); error
    // //步骤
    // //上下文
    // SHA256_CTX c;
    // //初始化上下文
    // SHA256_Init(&c);
    // SHA256_Update(&c, txt, strlen(txt)+1);
    // //生成摘要信息
    // SHA256_Final(info, &c);

    //创建上下文
    EVP_MD_CTX *c = EVP_MD_CTX_new();
    //初始化算法
    EVP_DigestInit_ex(c, EVP_sha256(), NULL);
    //设置数据
    EVP_DigestSignUpdate(c, "hello", 5);
    // 获得摘要信息
    EVP_DigestFinal_ex(c, info, NULL);
    //释放资源
    EVP_MD_CTX_free(c);
    //转化为16进制
    for(int i = 0; i < SHA256_DIGEST_LENGTH; i++)
    {
        // char 8 位  -> 2个16进制数
        printf("%02x",info[i]);
    }
    printf("\n");

    return 0;
}